﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades.Seguridad;

namespace Mapping.Seguridad
{
    public static class MappingFormularios
    {
        public static List<Entidades.Seguridad.Formulario> ConsultarFormularios()
        {
            SqlCommand cmdFormularios = new SqlCommand();
            cmdFormularios.CommandText = "sp_ConsultarFormularios";
            Servicios.Conexion.ObtenerInstancia().Conectar("Seguridad");
            cmdFormularios.CommandType = System.Data.CommandType.StoredProcedure;
            cmdFormularios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            SqlDataReader drFormularios = cmdFormularios.ExecuteReader();

            List<Entidades.Seguridad.Formulario> ColFormularios = new List<Entidades.Seguridad.Formulario>();

            while (drFormularios.Read())
            {
                Entidades.Seguridad.Formulario oFormulario = new Entidades.Seguridad.Formulario();
                Entidades.Seguridad.Modulo oModulo = new Entidades.Seguridad.Modulo();

                oFormulario.IdFormulario = drFormularios["Id_Formularios"].ToString();
                oFormulario.Nombre = drFormularios["Nombre"].ToString();
                oFormulario.Descripcion = drFormularios["DescForm"].ToString();


                SqlCommand cmd2cmdFormularios = new SqlCommand();
                cmd2cmdFormularios.CommandText = "sp_ConsultarFormularioPermiso";
                cmd2cmdFormularios.CommandType = System.Data.CommandType.StoredProcedure;
                cmd2cmdFormularios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmd2cmdFormularios.Parameters.Add("@Id_Formularios", System.Data.SqlDbType.VarChar, 15).Value = oFormulario.IdFormulario;
                SqlDataReader drFormularioPermiso = cmd2cmdFormularios.ExecuteReader();

                while (drFormularioPermiso.Read())
                {
                    Entidades.Seguridad.Permiso oPermiso= new Entidades.Seguridad.Permiso();
                    oPermiso.IdPermiso = (drFormularioPermiso["Id_Permisos"]).ToString();
                    oPermiso.Nombre = (drFormularioPermiso["Descripcion"]).ToString();
                    oFormulario.AgregarPermiso(oPermiso);
                }

                
                ColFormularios.Add(oFormulario);
            }

            Servicios.Conexion.ObtenerInstancia().Desconectar("Seguridad");
            return ColFormularios;
        }

        public static bool AgregarFormulario(Entidades.Seguridad.Formulario oFormulario)
        {
            SqlCommand cmdFormu = new SqlCommand();
            cmdFormu.CommandText = "sp_AgregarFormulario";
            Servicios.Conexion.ObtenerInstancia().Conectar("Seguridad");
            cmdFormu.CommandType = System.Data.CommandType.StoredProcedure;
            cmdFormu.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdFormu.Parameters.Add("@Id_Formularios", System.Data.SqlDbType.VarChar, 15).Value = oFormulario.IdFormulario;
            cmdFormu.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar, 50).Value = oFormulario.Descripcion;
            cmdFormu.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar).Value = oFormulario.Nombre;
            cmdFormu.ExecuteNonQuery();

            foreach (Entidades.Seguridad.Permiso permiso in oFormulario.Permisos)
            {
                SqlCommand cmdFormularioPermiso = new SqlCommand();
                cmdFormularioPermiso.CommandText = "sp_AgregarFormularioPermiso";
                cmdFormularioPermiso.CommandType = System.Data.CommandType.StoredProcedure;
                cmdFormularioPermiso.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdFormularioPermiso.Parameters.Add("@Id_Formularios", System.Data.SqlDbType.VarChar).Value = oFormulario.IdFormulario;
                cmdFormularioPermiso.Parameters.Add("@Id_Permisos", System.Data.SqlDbType.VarChar).Value = permiso.IdPermiso;
                cmdFormularioPermiso.ExecuteNonQuery();
            }

            Servicios.Conexion.ObtenerInstancia().Desconectar("Seguridad");
            return true;
        }

        public static int ModificarFormulario(Entidades.Seguridad.Formulario oFormulario)
        {
            SqlCommand cmdFormulario = new SqlCommand();
            cmdFormulario.CommandText = "sp_ModificarFormularios";
            Servicios.Conexion.ObtenerInstancia().Conectar("Seguridad");
            cmdFormulario.CommandType = System.Data.CommandType.StoredProcedure;
            cmdFormulario.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdFormulario.Parameters.Add("@Id_Formulario", System.Data.SqlDbType.VarChar).Value = oFormulario.IdFormulario;
            cmdFormulario.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar).Value = oFormulario.Nombre;
            cmdFormulario.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar).Value = oFormulario.Descripcion;
            int nro = Convert.ToInt32(cmdFormulario.ExecuteScalar());

            SqlCommand cmdEliminarFormularioPermiso = new SqlCommand();
            cmdEliminarFormularioPermiso.CommandText = "sp_EliminarFormularioPermiso";
            cmdEliminarFormularioPermiso.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarFormularioPermiso.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarFormularioPermiso.Parameters.Add("@Id_Formulario", System.Data.SqlDbType.VarChar).Value = oFormulario.IdFormulario;
            cmdEliminarFormularioPermiso.ExecuteNonQuery();

            foreach (Entidades.Seguridad.Permiso permiso in oFormulario.Permisos)
            {
                SqlCommand cmdFormularioPermiso = new SqlCommand();
                cmdFormularioPermiso.CommandText = "sp_AgregarFormularioPermiso";
                cmdFormularioPermiso.CommandType = System.Data.CommandType.StoredProcedure;
                cmdFormularioPermiso.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdFormularioPermiso.Parameters.Add("@Id_Formularios", System.Data.SqlDbType.VarChar).Value = oFormulario.IdFormulario;
                cmdFormularioPermiso.Parameters.Add("@Id_Permisos", System.Data.SqlDbType.VarChar).Value = permiso.IdPermiso;
                cmdFormularioPermiso.ExecuteNonQuery();
            }
            Servicios.Conexion.ObtenerInstancia().Desconectar("Seguridad");
            return nro;
        }

        public static bool EliminarFormulario(Formulario oFormulario)
        {
            SqlCommand cmdEliminarFormularioPermiso = new SqlCommand();
            cmdEliminarFormularioPermiso.CommandText = "sp_EliminarFormularioPermiso";
            cmdEliminarFormularioPermiso.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Seguridad");
            cmdEliminarFormularioPermiso.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarFormularioPermiso.Parameters.Add("@Id_Formulario", System.Data.SqlDbType.VarChar).Value = oFormulario.IdFormulario;
            cmdEliminarFormularioPermiso.ExecuteNonQuery();

            SqlCommand cmdEliminarFormulario = new SqlCommand();
            cmdEliminarFormulario.CommandText = "sp_EliminarFormulario";
            cmdEliminarFormulario.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarFormulario.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarFormulario.Parameters.Add("@Id_Formulario", System.Data.SqlDbType.VarChar).Value = oFormulario.IdFormulario;
            cmdEliminarFormulario.ExecuteNonQuery();

            Servicios.Conexion.ObtenerInstancia().Conectar("Seguridad");
            return true;
        }
    }
}
